<?php
//递归获得分类树
if ( ! function_exists('getTree')) {
	/**
	 * 获得递归树
	 * User: ihome
	 * @param $data
	 * @param string $pid
	 * @param int $level
	 * @return array
	 */
	function getTree($data, $pid = '0', $level = 0)
	{
		static $tree = [];
		foreach ($data as $k => $v) {
			if ($v['pid'] == $pid) {
				$v['level'] = $level;
				$tree[]     = $v;

				getTree($data, $v['id'], $level + 1);
			}
		}

		return $tree;
	}
}


if ( ! function_exists('getChildIds')) {
	/**
	 * 获得分类下的所有id
	 * User: ihome
	 * @param $table
	 * @param $id
	 * @return array
	 */
	function getChildIds($table, $id,$where= [])
	{
		$lists = DB::table($table)->where($where)->get()->toArray();
		$lists = array_map('get_object_vars',$lists);
		//获得子分类处理逻辑
		$array = _getChildIds($lists,$id);

		return $array;
	}
}

if(!function_exists('_getChildIds')){
	/**
	 * 获得分类下的所有子分类处理逻辑
	 * User: ihome
	 * @param $lists
	 * @param $id
	 * @param array $array
	 * @return array
	 */
	function _getChildIds($lists, $id)
	{
		static $array = [];
		foreach ($lists as $k => $v) {
			if ($v['pid'] == $id) {
				$array[] = $v['id'];

				_getChildIds($lists, $v['id']);
			}
		}

		return $array;
	}
}


if(! function_exists('sendMsgToMobile')){
	/**
	 * SendMsgToMobile 发送短信到手机
	 * @param $tel string 电话
	 * @param $content string 内容
	 */
	function sendMsgToMobile($tel, $content = '')
	{

		$post_data['userid']   = '4865';
		$post_data['account']  = '2722295322';
		$post_data['password'] = 'dykj0791@';
//	$post_data['content'] = $content;
		$post_data['content'] = $content;
		//多个手机号码用英文半角豆号‘,’分隔
		$post_data['mobile'] = $tel;
		$url                 = 'http://sms.kingtto.com:9999/sms.aspx?action=send';
		$o                   = '';
		foreach ($post_data as $k => $v) {
			//短信内容需要用urlencode编码，否则可能收到乱码
			$o .= "$k=" . urlencode($v) . '&';
		}
		$post_data = substr($o, 0, -1);
		$ch        = curl_init();
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果需要将结果直接返回到变量里，那加上这句。
		$xml = curl_exec($ch);

		//转数组
		$xml    = simplexml_load_string($xml);
		$result = json_decode(json_encode($xml), true);
		return $result;
	}
}

if(! function_exists('dicarer')){

	/**
	 * 笛卡尔积
	 * User: Clannad ~ ☆
	 * DataTime：2019/11/16 14:16
	 * @param $data
	 * @return array|mixed
	 */
	function dicarer($data)
	{
		//抛出要计算的数组的第一个数组
		$arr = array_shift($data);

		$i = 0;
		foreach ($data as $k => $item) {
			$res = [];
			if($i == 0){
				foreach ($arr as $k1 => $v1) {
					foreach ($item as $k2 => $v2) {
						$tmp = [];
						$tmp[$k1] = $v1;
						$tmp[$k2] = $v2;
						$res[] = $tmp;
					}
				}
				$arr = $res;
			}else{
				foreach ($arr as $k1 => $v1) {
					foreach ($item as $k2 => $v2) {
						$v1[$k2] = $v2;
						$res[] = $v1;
						array_pop($v1);
					}

				}
				$arr = $res;
			}
			$i++;
		}

		return $arr;
	}
}

if(! function_exists('bccompNum')){

	/**
	 * 高精度比较数字的大小
	 * User: ihome
	 * @param $leftNum double 左边的数字（原比较数）
	 * @param $comp string 比较符号 gt 大于 eq 等于 lt 小于
	 * @param $rightNum integer 右边的数字（被比较数）
	 * @return bool 成立返回true 不成立 返回false
	 */
	function bccompNum($leftNum,$comp = '>',$rightNum){
		//左大 +1 等于 0 右大 -1
		switch ($comp) {
			case '>':
				if(bccomp($leftNum,$rightNum,2) == '1'){
					return true;
				}else{
					return false;
				}
				break;
			case '=':
				if(bccomp($leftNum,$rightNum,2) == '0'){
					return true;
				}else{
					return false;
				}
				break;
			case '<':
				if(bccomp($leftNum,$rightNum,2) == '-1'){
					return true;
				}else{
					return false;
				}
				break;
			case '>=':
				if(bccomp($leftNum,$rightNum,2) == '1' || bccomp($leftNum,$rightNum,2) == '0'){
					return true;
				}else{
					return false;
				}
				break;
			case '<=':
				if(bccomp($leftNum,$rightNum,2) == '-1' || bccomp($leftNum,$rightNum,2) == '0'){
					return true;
				}else{
					return false;
				}

			default:
				return false;
				break;
		}

	}
}

if(! function_exists('createUniqueOrderSn')){
	/**
	 * 生成唯一订单号
	 * User: ihome
	 * @return string
	 */
	function createUniqueOrderSn(){
		return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
	}
}



if(! function_exists('write_log')){
	/**
	 * 记录日志写入文档
	 * @param $str
	 * @param $mode
	 */
	function write_log($str,$id = 0)
	{
		if (is_array($str)) {
			$str = json_encode($str);
		}
		$mode = 'a';//追加方式写

//	$file = $id ."-Apilog".date('Y-m-d-H-i-s',time()).".txt";

//	$str .= '\n==='.date('Y-m-d H:i:s',time()).'===\n';
		$str .= '===========================================';
		$file = date('Y-m-d',time()) . '.txt';

		$oldmask = @umask(0);

		$fp = @fopen($file, $mode);

		@flock($fp, 3);

		if (!$fp) {
			Return false;
		} else {
			@fwrite($fp, $str);
			@fclose($fp);
			@umask($oldmask);
			Return true;
		}
	}
}

if(!function_exists('getHttpType')){
	/**
	 * 获得http请求类型
	 * @return string http:// 或 https://
	 */
	function getHttpType(){
		$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
		return $http_type;
	}
}

if(!function_exists('http_curl')){

	/**
	 *curl工具请求数据返回
	 *@Author   iHome
	 *@DateTime 2017-03-26T15:13:27+0800
	 *@param    string $url 请求的url
	 *@param    string $type 请求的方式GET/POST
	 *@param    string $res 返回的数据类型
	 *@param    array $arr 请求时的参数
	 */
	function http_curl($url,$type='get',$res='json',$arr=''){
		// 1,初始化curl
		$ch     = curl_init();
		// 2,设置curl参数
		curl_setopt($ch,CURLOPT_URL,$url);//设置采集的url
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//1或者true 表示返回采集内容
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 检查证书中是否设置域名

		if ($type=="post") {//如果是POST请求，这里定义2个配置项
			curl_setopt($ch,CURLOPT_POST,1);
			curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
		}
		// 3,采集内容
		$output = curl_exec($ch);
		// print_r($output);
		if ($res=="json") {
			if (curl_errno($ch)) {
				// 4,关闭curl
				curl_close($ch);
				//请求失败，返回错误信息
//			$error = curl_error($ch);
				return curl_error($ch);
			}else{
				//请求成功 返回数据（数组格式）
//			write_log($output);
				return json_decode($output,true);
			}
		}
	}
}



?>
